package com.sgcc.lms.openstack.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.sgcc.lms.openstack.exception.*;
import com.sgcc.lms.openstack.model.po.Project;
import org.openstack4j.model.common.ActionResponse;
import org.openstack4j.model.identity.v3.Token;
import org.openstack4j.model.identity.v3.User;

import java.io.IOException;
import java.util.List;

/**
 * @Author: 李孟帅
 * @CreateTime: 2020-07-17 14:16
 * @Description:
 */
public interface KeystoneService {

    /**
     * @Author 李孟帅
     * @Description 无范围认证
     * @Date 2020/7/17
     **/
    String token(String username, String password) throws JsonProcessingException;

    /**
     * @Author 李孟帅
     * @Description 项目范围认证（指定项目id）
     * @Date 2020/7/18
     **/
    String token(String username, String password, String projectId) throws JsonProcessingException;

    /**
    * @Author 李孟帅
    * @Description 项目范围认证(指定项目名称)
    * @Date 2020/7/25
    **/
    String tokenScope(String username, String password, String projectName) throws JsonProcessingException;
    /**
     * @Author 李孟帅
     * @Description 获取可用的项目
     * @Date 2020/7/18
     **/
    List<Project> authProjects(String tokenId) throws IOException, HttpException;

    /**
     * @Author 李孟帅
     * @Description 列出项目
     * @Date 2020/7/18
     **/
    List<Project> projects(String tokenId) throws IOException,HttpException;

    /**
     * @Author 李孟帅
     * @Description 创建项目
     * @Date 2020/7/18
     **/
    Project createProject(String tokenId, Project project) throws IOException,HttpException;

    /**
     * @Author 李孟帅
     * @Description 显示项目详细信息
     * @Date 2020/7/20
     **/
    Project getProject(String tokenId, String id) throws IOException, HttpException;

    /**
     * @Author 李孟帅
     * @Description 更新项目
     * @Date 2020/7/20
     **/
    Project updateProject(String tokenId, Project project) throws HttpException,  IOException;

    /**
     * @Author 李孟帅
     * @Description 删除项目
     * @Date 2020/7/20
     **/
    String deleteProject(String tokenId, String id) throws IOException, HttpException;

    /**
     * @Author 李孟帅
     * @Description 列出用户
     * @Date 2020/7/18
     **/
    List<? extends User> users(String tokenId) throws NullTokenException;

    /**
     * @Author 李孟帅
     * @Description 创建用户
     * @Date 2020/7/21
     **/
    User createUser(String tokenId, User user) throws NullTokenException, ForbiddenException;

    /**
     * @Author 李孟帅
     * @Description 显示用户详细信息
     * @Date 2020/7/21
     **/
    User getUser(String tokenId, String id) throws NullTokenException, ForbiddenException;

    /**
     * @Author 李孟帅
     * @Description 更新用户
     * @Date 2020/7/21
     **/
    User updateUser(String tokenId, User user) throws NullTokenException, ForbiddenException;

    /**
     * @Author 李孟帅
     * @Description 删除用户
     * @Date 2020/7/21
     **/
    ActionResponse deleteUser(String tokenId, String id) throws NullTokenException, ForbiddenException;


}
